﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using GRUPO_4.Dominio;
using System.Configuration;


namespace GRUPO_4.Persistencia
{

    public class OfertaLaboralDao : IOfertaLaboralDAO
    {
        private SqlConnection conexion;

        public OfertaLaboralDao()
        {
            conexion = new SqlConnection();
            conexion.ConnectionString = ConfigurationManager.ConnectionStrings["cn"].ConnectionString;
        }

        public OfertaLaboral CrearOfertaLaboral(OfertaLaboral ofertaLaboral)
        {
            String sentencia = "INSERT INTO OfertaLaboral VALUES (@idOfertaLaboral,@numeroVacantes,@fechInicio,@fechaCierre,@estado,@LugarEmpleo,@CodPuesto,@codEmpresa,@codContrato)";
            this.conexion.Open();
            using (SqlCommand comando = new SqlCommand(sentencia, this.conexion))
            {
                SqlParameter idOfertaLaboral = new SqlParameter("@idOfertaLaboral", System.Data.SqlDbType.Int);
                idOfertaLaboral.Value = ofertaLaboral.idOfertaLaboral;
                comando.Parameters.Add(idOfertaLaboral);

                SqlParameter numeroVacantes = new SqlParameter("@numeroVacantes", System.Data.SqlDbType.Int);
                numeroVacantes.Value = ofertaLaboral.numeroVacantes;
                comando.Parameters.Add(numeroVacantes);

                SqlParameter fechInicio = new SqlParameter("@fechInicio", System.Data.SqlDbType.DateTime);
                fechInicio.Value = ofertaLaboral.fechInicio;
                comando.Parameters.Add(fechInicio);

                SqlParameter fechaCierre = new SqlParameter("@fechaCierre", System.Data.SqlDbType.DateTime);
                fechaCierre.Value = ofertaLaboral.fechaCierre;
                comando.Parameters.Add(fechaCierre);

                SqlParameter estado = new SqlParameter("@estado", System.Data.SqlDbType.Int);
                estado.Value = ofertaLaboral.estado;
                comando.Parameters.Add(estado);

                SqlParameter LugarEmpleo = new SqlParameter("@LugarEmpleo", System.Data.SqlDbType.NVarChar);
                LugarEmpleo.Value = ofertaLaboral.lugarEmpleo;
                comando.Parameters.Add(LugarEmpleo);

                SqlParameter CodPuesto = new SqlParameter("@CodPuesto", System.Data.SqlDbType.Int);
                CodPuesto.Value = ofertaLaboral.codPuesto;
                comando.Parameters.Add(CodPuesto);

                SqlParameter codEmpresa = new SqlParameter("@codEmpresa", System.Data.SqlDbType.Int);
                codEmpresa.Value = ofertaLaboral.codEmpresa;
                comando.Parameters.Add(codEmpresa);

                SqlParameter codContrato = new SqlParameter("@codContrato", System.Data.SqlDbType.Int);
                codContrato.Value = ofertaLaboral.codContrato;
                comando.Parameters.Add(codContrato);

                comando.ExecuteNonQuery();
            }

            this.conexion.Close();
            return this.ObtenerOfertaLaboral(ofertaLaboral.idOfertaLaboral);
        }

        public OfertaLaboral ModificarOferta(OfertaLaboral objeto)
        {

            string fecha1 = objeto.fechaCierre.ToString("yyyy/MM/dd");
            string fecha2 = objeto.fechInicio.ToString("yyyy/MM/dd");

            conexion.Open();
            String sqlvalores1 = "numeroVacantes=" + objeto.numeroVacantes +
                                 ", fechInicio=" + fecha2 +
                                 ", fechaCierre=" + fecha1 +
                                 ", estado=" + objeto.estado +
                                 ", LugarEmpleo='" + objeto.lugarEmpleo + "'" +
                                 ", CodPuesto=" + objeto.codPuesto +
                                 ", codEmpresa=" + objeto.codEmpresa +
                                 ", codContrato=" + objeto.codContrato;



            String sentencia = "UPDATE ofertaLaboral SET " + sqlvalores1 + " WHERE idOfertaLaboral=" + objeto.idOfertaLaboral;
            SqlCommand comando = new SqlCommand(sentencia, conexion);

            comando.ExecuteNonQuery();
            conexion.Close();
            return this.ObtenerOfertaLaboral(objeto.idOfertaLaboral);

        }
        public OfertaLaboral ObtenerOfertaLaboral(int codigo)
        {

            String sentencia = "SELECT * FROM OfertaLaboral WHERE idOfertaLaboral=@idOfertaLaboral";
            this.conexion.Open();
            OfertaLaboral ofertaLaboral = null;
            using (SqlCommand comando = new SqlCommand(sentencia, this.conexion))
            {
                SqlParameter buscador = new SqlParameter("@idOfertaLaboral", System.Data.SqlDbType.Int);
                buscador.Value = codigo;
                comando.Parameters.Add(buscador);
                SqlDataReader resultado = comando.ExecuteReader();
                if (resultado.HasRows)
                {
                    resultado.Read();
                    ofertaLaboral = new OfertaLaboral();
                    ofertaLaboral.idOfertaLaboral = (int)resultado["idOfertaLaboral"];
                    ofertaLaboral.numeroVacantes = (int)resultado["numeroVacantes"];
                    ofertaLaboral.fechInicio = (DateTime)resultado["fechInicio"];
                    ofertaLaboral.fechaCierre = (DateTime)resultado["fechaCierre"];
                    ofertaLaboral.estado = (int)resultado["estado"];
                    ofertaLaboral.lugarEmpleo = (String)resultado["LugarEmpleo"];
                    ofertaLaboral.codPuesto = (int)resultado["CodPuesto"];
                    ofertaLaboral.codEmpresa = (int)resultado["codEmpresa"];
                    ofertaLaboral.codContrato = (int)resultado["codContrato"];

                }
            }


            this.conexion.Close();
            return ofertaLaboral;
        }

        public void eliminarOfertaLaboral(int codigo)
        {
            String sentencia = "DELETE FROM OfertaLaboral where idOfertaLaboral=@idOfertaLaboral";
            this.conexion.Open();
            using (SqlCommand comando = new SqlCommand(sentencia, this.conexion))
            {
                SqlParameter borrador = new SqlParameter("@idOfertaLaboral", System.Data.SqlDbType.Int);
                borrador.Value = codigo;
                comando.Parameters.Add(borrador);
                comando.ExecuteNonQuery();
            }
            this.conexion.Close();
        }
        public ICollection<OfertaLaboral> ListarXOFertas()
        {
            conexion.Close();
            conexion.Open();

            String sentencia = "SELECT * FROM OfertaLaboral";

            SqlCommand comando = new SqlCommand(sentencia, conexion);

            SqlDataReader resultado = comando.ExecuteReader();

            //Se declara la coleccion de Ofertas --- Coleccion es un contenedor de objetos de tipo OfertasLab

            ICollection<OfertaLaboral> objColeccionOfertaLAboral = new List<OfertaLaboral>();

            while (resultado.Read())
            {

                OfertaLaboral unaOfertaLaboral = new OfertaLaboral();

                unaOfertaLaboral.idOfertaLaboral = (Int32)resultado["idOfertaLaboral"];
                unaOfertaLaboral.numeroVacantes = (Int32)resultado["numeroVacantes"];
                unaOfertaLaboral.fechInicio = (DateTime)resultado["fechInicio"];
                unaOfertaLaboral.fechaCierre = (DateTime)resultado["fechaCierre"];
                unaOfertaLaboral.estado = (int)resultado["estado"];
                unaOfertaLaboral.lugarEmpleo = (String)resultado["LugarEmpleo"];
                unaOfertaLaboral.codPuesto = (int)resultado["CodPuesto"];
                unaOfertaLaboral.codEmpresa = (int)resultado["codEmpresa"];
                unaOfertaLaboral.codContrato = (int)resultado["codContrato"];

                objColeccionOfertaLAboral.Add(unaOfertaLaboral);
            }
            conexion.Close();
            return objColeccionOfertaLAboral;

        }


        public ICollection<OfertaLaboral> ListarPorNombreSimilar(string descripcion)
        {
            throw new NotImplementedException();
        }

        public OfertaLaboral Crear(OfertaLaboral ofertaLaboral)
        {
            return this.CrearOfertaLaboral(ofertaLaboral);
        }

        public OfertaLaboral Obtener(int id)
        {
            return this.ObtenerOfertaLaboral(id);
        }

        public OfertaLaboral Modificar(OfertaLaboral ofertaLaboral)
        {
            return this.ModificarOferta(ofertaLaboral);
        }

        public void Eliminar(OfertaLaboral ofertaLaboral)
        {
            this.eliminarOfertaLaboral(ofertaLaboral.idOfertaLaboral);
        }


        public ICollection<OfertaLaboral> ListarXOFertas(int Idoferta)
        {
            throw new NotImplementedException();
        }

    }
}